--- boost/context/continuation.hpp
+++ boost/context/continuation.hpp
@@ -299,6 +299,24 @@
     friend continuation
     callcc( std::allocator_arg_t, preallocated, StackAlloc, Fn &&);
 
+#if defined(BOOST_GCC) && BOOST_GCC < 50000
+    template< typename StackAlloc, typename Fn, typename ... Arg >
+    friend continuation
+    callcc_with_args( std::allocator_arg_t, StackAlloc, Fn &&, Arg ...);
+
+    template< typename StackAlloc, typename Fn, typename ... Arg >
+    friend continuation
+    callcc_with_args_palloc( std::allocator_arg_t, preallocated, StackAlloc, Fn &&, Arg ...);
+
+    template< typename StackAlloc, typename Fn >
+    friend continuation
+    callcc_no_args( std::allocator_arg_t, StackAlloc, Fn &&);
+
+    template< typename StackAlloc, typename Fn >
+    friend continuation
+    callcc_no_args_palloc( std::allocator_arg_t, preallocated, StackAlloc, Fn &&);
+#endif
+
     detail::transfer_t  t_{ nullptr, nullptr };
 
     continuation( detail::fcontext_t fctx) noexcept :
@@ -518,6 +536,56 @@
                         palloc, salloc, std::forward< Fn >( fn) ) }.resume();
 }
 
+#if defined(BOOST_GCC) && BOOST_GCC < 50000
+
+template<
+    typename StackAlloc,
+    typename Fn,
+    typename ... Arg
+>
+continuation
+callcc_with_args( std::allocator_arg_t, StackAlloc salloc, Fn && fn, Arg ... arg) {
+    using Record = detail::record< continuation, StackAlloc, Fn >;
+    return continuation{
+                        detail::context_create< Record >(
+                               salloc, std::forward< Fn >( fn) ) }.resume(
+                   std::forward< Arg >( arg) ... );
+}
+
+template<
+    typename StackAlloc,
+    typename Fn,
+    typename ... Arg
+>
+continuation
+callcc_with_args_palloc( std::allocator_arg_t, preallocated palloc, StackAlloc salloc, Fn && fn, Arg ... arg) {
+    using Record = detail::record< continuation, StackAlloc, Fn >;
+    return continuation{
+                        detail::context_create< Record >(
+                               palloc, salloc, std::forward< Fn >( fn) ) }.resume(
+                   std::forward< Arg >( arg) ... );
+}
+
+template< typename StackAlloc, typename Fn >
+continuation
+callcc_no_args( std::allocator_arg_t, StackAlloc salloc, Fn && fn) {
+    using Record = detail::record< continuation, StackAlloc, Fn >;
+    return continuation{
+                detail::context_create< Record >(
+                        salloc, std::forward< Fn >( fn) ) }.resume();
+}
+
+template< typename StackAlloc, typename Fn >
+continuation
+callcc_no_args_palloc( std::allocator_arg_t, preallocated palloc, StackAlloc salloc, Fn && fn) {
+    using Record = detail::record< continuation, StackAlloc, Fn >;
+    return continuation{
+                detail::context_create< Record >(
+                        palloc, salloc, std::forward< Fn >( fn) ) }.resume();
+}
+
+#endif
+
 #if defined(BOOST_USE_SEGMENTED_STACKS)
 template<
     typename Fn,

--- libs/fiber/src/context.cpp
+++ libs/fiber/src/context.cpp
@@ -219,7 +219,11 @@
     type_{ type::dispatcher_context },
     policy_{ launch::post }
 {
+#if defined(BOOST_GCC) && BOOST_GCC < 50000
+    c_ = boost::context::callcc_no_args_palloc(
+#else
     c_ = boost::context::callcc(
+#endif
             std::allocator_arg, palloc, salloc,
             [this,sched](boost::context::continuation && c) noexcept {
                 c = c.resume();


